home *** CD-ROM | disk | FTP | other *** search
/ Playboy Electronic Datebook / Playboy Electronic Datebook - Disk 1.img / PBINST.MS_ / PBINST.MS
Text File  |  1993-10-22  |  24KB  |  727 lines

  1.  
  2. '**************************************************************************
  3. '*                 Playboy Electronic Datebook
  4. '**************************************************************************
  5.  
  6. '' not defined
  7. ''$DEFINE DEBUG  ''Define for script development/debugging
  8. '$DEFINE VERSION
  9. '$DEFINE STARTUP_ICON
  10. ''$DEFINE SAMPLER
  11. ''$DEFINE SPEAKER
  12. '$DEFINE NUKE_SAMPLER
  13.  
  14. '$INCLUDE 'setupapi.inc'
  15. '$INCLUDE 'msdetect.inc'
  16. '$INCLUDE 'msregdb.inc'
  17. '$INCLUDE 'strings.inc'
  18. '$INCLUDE 'pbinst.inc'
  19. '$INCLUDE 'misc.inc'
  20. '$IFDEF VERSION
  21.     '$INCLUDE 'version.inc'
  22.     '$INCLUDE 'version.mst'
  23. '$ENDIF
  24. ''________________________________________________________________
  25. ''
  26.  
  27. '$IFDEF DEBUG
  28.     ECHO ON  ''sends output to debug monitor
  29. '$ELSE
  30.     ECHO OFF
  31. '$ENDIF
  32. GLOBAL bWinDirAccess%
  33. GLOBAL bWinSysDirAccess%
  34. GLOBAL bInstallPrefs%
  35. INIT:
  36.     iMaxNumTP% = 20    ''arbitrary
  37.     bWinDirAccess% = TRUE
  38.     bWinSysDirAccess% = TRUE
  39.     bInstallPrefs% = TRUE
  40.     bRestart% = FALSE
  41.  
  42.     ''Initialize BadFileList
  43.     BadFileList$ = "BadFileList"
  44.  
  45.     CUIDLL$ = CUSTOMDLL                 ''custom user interface dll
  46.     HELPPROC$ = HELPPROCEDURE          ''Help dialog procedure
  47.     SYSDATETIME$ = DATETIME$            ''Get system date and time
  48.  
  49.     SetAbout ABOUTTITLE1, ABOUTTITLE2
  50.     SetBitmap CUIDLL$, LOGO
  51.     SetTitle ABOUTTITLE1
  52.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  53.  
  54.     szInstIni$ = GetSymbolValue("STF_CWDDIR") + INSTINI
  55.     '' Debug PRINT szInstIni$
  56.     SPLASH% = VAL(GetIniKeyString(szInstIni$, INI_SEC_INFORMATION, INI_KEY_SPLASH))
  57.     bInstallCtl3D% = VAL(GetIniKeyString(szInstIni$, INI_SEC_INFORMATION, INF_KEY_CTL3D ))
  58.  
  59. ''** Check if the Planner is running already
  60.     bIsADPRunning% = FindWindow(CLASSNAME_PBEDB, 0)
  61.     ''PRINT bIsADPRunning%
  62.     IF bIsADPRunning% THEN
  63.         iRC% = DoMsgBox(ERROR_ADP_RUNNING, ERROR_CAPTION, MB_ICONHAND+MB_TASKMODAL+MB_OK)
  64.         ERR = 21
  65.         GOTO QUIT
  66.     END IF
  67.  
  68.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  69.     IF szInf$ = "" THEN
  70.     szInf$ = GetSymbolValue("STF_CWDDIR") + INF
  71.     END IF
  72.     '' Debug PRINT "szInf$ = "+szInf$
  73.     ReadInfFile szInf$
  74.  
  75.     WINDRIVE$ = MID$(GetWindowsDir(), 1, 1)
  76.     IF IsDriveValid(WINDRIVE$) = 0 THEN
  77.         iRC% = DoMsgBox(ERROR_NOWINDIRACCESS + CHR$(13) + CHR$(13) + GetWindowsDir(), ERROR_CAPTION, MB_ICONHAND+MB_TASKMODAL+MB_OK)
  78.         ERR = -1  '' install failure
  79.         goto QUIT
  80.     END IF
  81.     IF IsDirWritable(GetWindowsDir()) = 0 THEN
  82.         bWinDirAccess% = FALSE
  83.         iRC% = DoMsgBox(ERROR_NOWINDIRACCESS + CHR$(13) + CHR$(13) + GetWindowsDir(), ERROR_CAPTION, MB_ICONHAND+MB_TASKMODAL+MB_OK)
  84.         ERR = -1  '' install failure
  85.         goto QUIT
  86.     END IF
  87.     IF IsDirWritable(GetWindowsSysDir()) = 0 THEN
  88.         bWinSysDirAccess% = FALSE
  89.     END IF
  90.  
  91.     ini$ = MakePath(GetWindowsDir(), AMAZEINI)
  92.     '' Check if Amaze.ini is read/writeable.  Quit if it is not.  If it doesn't exist, don't worry about it
  93.     IF DoesFileExist(ini$, femExists) THEN
  94.         IF DoesFileExist(ini$, femReadWrite) = 0 THEN
  95.             iRC% = DoMsgBox(ini$ + ERROR_INI_NOT_RW, ERROR_CAPTION, MB_ICONHAND+MB_TASKMODAL+MB_OK)
  96.             ERR = -1  '' install failure
  97.             goto QUIT
  98.         END IF
  99.     END IF
  100.  
  101.     DEST$ = FindTargetOnEnvVar(FILENAME_PBEDB, ENV_VAR_PATH)
  102.     IF DEST$ <> "" THEN
  103.         SPLITPATH DEST$, szDRV$, szDIR$, szFileName$, szEXT$
  104.         DEST$ = szDRV$ + szDIR$
  105.     ELSE
  106.         IF DoesIniKeyExist(ini$, INI_SEC_INSTALL_INFO, INI_KEY_PROGPATH) THEN
  107.             DEST$ = GetIniKeyString(ini$, INI_SEC_INSTALL_INFO, INI_KEY_PROGPATH)
  108.             IF (DoesFileExist(MakePath(DEST$,FILENAME_PBEDB), femExists)) THEN
  109.                 DEST$ = DEST$
  110.             ELSE
  111.                 DEST$ = WINDRIVE$ + ":\" + PROGDIR
  112.             END IF
  113.         ELSE
  114.             DEST$ = WINDRIVE$ + ":\" + PROGDIR
  115.         END IF
  116.     ENDIF
  117.  
  118. ''*** check if multimedia capable machine
  119.     bIsMultimedia% = FALSE
  120.     SYSINI$ = MakePath(GetWindowsDir(), FILE_SYSINI)
  121.     IF LCASE$(GetIniKeyString(SYSINI$,INI_SEC_BOOT,INI_KEY_DRIVERS)) = FILE_MMSYSTEMDLL THEN
  122.         bIsMultimedia% = TRUE
  123.     END IF
  124.  
  125. ''*** setup the lists needed during install
  126.     ''CustInst list symbols
  127.     CHECKSTATES$ = "CheckItemsState"
  128.     STATUSTEXT$  = "StatusItemsText"
  129.     CONFIRMTEXTIN$ = "ConfirmTextIn"
  130.     FOR i% = 1 TO 2 STEP 1
  131.         AddListItem CONFIRMTEXTIN$, ""
  132.     NEXT i%
  133.     FOR i% = 1 TO 2 STEP 1
  134.         AddListItem CHECKSTATES$, "ON"
  135.     NEXT i%
  136.     FOR i% = 1 TO 2 STEP 1
  137.         AddListItem STATUSTEXT$, ""
  138.     NEXT i%
  139.  
  140.  
  141.     ''Disk cost list symbols
  142.     APPNEEDS$   = "AppNeeds"
  143.     OTHERNEEDS$ = "OtherNeeds"
  144.     EXTRACOSTS$ = "ExtraCosts"
  145.     BIGLIST$    = "BigList"
  146.     FOR i% = 1 TO 2 STEP 1        ''I think there are only two items on this list
  147.        AddListItem BIGLIST$, ""
  148.     NEXT i%
  149.  
  150.     FOR i% = 1 TO 26 STEP 1
  151.         AddListItem EXTRACOSTS$, "0"
  152.     NEXT i%
  153.  
  154.     RecalcPath
  155.  
  156. '$IFDEF DEBUG
  157.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  158. '$ENDIF ''DEBUG
  159.  
  160.  
  161. WELCOME:
  162.  
  163.     WELCOME_TEXT1$ = GetIniKeyString(szInstIni$, INI_SEC_INFORMATION, INI_KEY_WEL_TEXT1)
  164.     WELCOME_TEXT1PT2$ = GetIniKeyString(szInstIni$, INI_SEC_INFORMATION, INI_KEY_WEL_TEXT1PT2)
  165.     WELCOME_TEXT2$ = GetIniKeyString(szInstIni$, INI_SEC_INFORMATION, INI_KEY_WEL_TEXT2)
  166.     WELCOME_TEXT2PT2$ = GetIniKeyString(szInstIni$, INI_SEC_INFORMATION, INI_KEY_WEL_TEXT2PT2)
  167.  
  168.     szConfirmText$ = WELCOME_TEXT1 + WELCOME_TEXT1PT2$
  169.     szConfirmText2$ = WELCOME_TEXT2 + WELCOME_TEXT2PT2
  170.     DlgCaption$ = "DlgCaption"
  171.     SetSymbolValue DlgCaption$, WELCOME_CAPTION
  172.     ReplaceListItem CONFIRMTEXTIN$, 1, szConfirmText$
  173.     ReplaceListItem CONFIRMTEXTIN$, 2, szConfirmText2$
  174.  
  175.     IF (SPLASH% = TRUE) AND (GetScreenHeight() > 400) THEN
  176.         sz$ = UIStartDlg(CUIDLL$, WELCOMESPLASH, "FSplashDlgProc", WELCOMEHELP, HELPPROC$)
  177.     ELSE
  178.         sz$ = UIStartDlg(CUIDLL$, WELCOME, "FWelcomeDlgProc", WELCOMEHELP, HELPPROC$)
  179.     END IF
  180.  
  181.     IF sz$ = "EXIT" THEN
  182.         UIPopAll
  183.         GOSUB ASKQUIT
  184.         GOTO WELCOME
  185.     ELSEIF sz$ = "REACTIVATE" THEN
  186.         GOTO WELCOME
  187.     ELSE
  188.         UIPop 1
  189.     END IF
  190.  
  191. GETINITIALPATH:
  192.     SetSymbolValue "EditTextIn", DEST$
  193.     SetSymbolValue "EditFocus", "END"
  194. GETINITIALPATHL1:
  195.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", DESTHELP, HELPPROC$)
  196.  
  197.     IF sz$ = "CONTINUE" THEN
  198.         olddest$ = DEST$
  199.         DEST$ = GetSymbolValue("EditTextOut")
  200.  
  201.         ''Validate new path.
  202.         IF IsDirWritable(DEST$) = 0 THEN
  203.             GOSUB BADPATH
  204.             GOTO GETINITIALPATHL1
  205.         END IF
  206.         UIPop 1
  207.  
  208.         ''Recalc if path changed.
  209.         IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  210.             RecalcPath
  211.         END IF
  212.  
  213.         olddest$ = ""
  214.     ELSEIF sz$ = "REACTIVATE" THEN
  215.         RecalcPath
  216.         GOTO GETINITIALPATHL1
  217.     ELSEIF sz$ = "EXIT" THEN
  218.         GOSUB ASKQUIT
  219.         GOTO GETINITIALPATHL1
  220.     ELSE
  221.         UIPop 1
  222.     END IF
  223.  
  224.  
  225. INSTALL:
  226.  
  227.  
  228. '$IFDEF VERSION
  229.     IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  230.  
  231.         iR% = VERSION(DEST$, szInstIni$, INI_KEY_VERSION) '' Does all version checking
  232.     END IF
  233. '$ENDIF
  234.  
  235.     IF DoesFileExist(MakePath(DEST$, GetSectionKeyFilename(INF_SEC_PREFS,INF_KEY_PREFS)), femExists) THEN
  236.         iResponse% = MsgYesNo(PREFS_EXISTS, PREFS_OVERWRITE, UPDATE_CAPTION)
  237.         IF iResponse% = NO THEN
  238.             bInstallPrefs% = FALSE
  239.         ENDIF
  240.     END IF
  241.  
  242.     ClearCopyList
  243.     AddOptFilesToCopyList APPFILES
  244.     RecalcPath
  245.     FOR i% = APPFILES TO APPFILES STEP 1
  246.         IF GetListItem(BIGLIST$, i%) <> "" THEN
  247.             GOSUB TOOBIG
  248.             GOTO GETPATH
  249.         END IF
  250.     NEXT i%
  251.  
  252.     CreateDir DEST$, cmoNone
  253. '$IFDEF BILLBOARDS
  254.     SetCopyGaugePosition 160, 10    ''** set up copy gauge right horiz. and near the top of the window
  255.  
  256.     '''*** set the billboard for either win30 or 31+.
  257.     nWinMajVer% = GetWindowsMajorVersion()
  258.     nWinMinVer% = GetWindowsMinorVersion()
  259.     IF (nWinMajVer% <= 3) AND NOT(nWinMinVer% >= 10) THEN
  260.         AddToBillBoardList CUIDLL$, BILLBOARD1_30, "FModelessDlgProc", 1
  261.         AddToBillBoardList CUIDLL$, BILLBOARD2_30, "FModelessDlgProc", 1
  262.         'AddToBillBoardList CUIDLL$, BILLBOARD3_30, "FModelessDlgProc", 1
  263.     ELSE
  264.         AddToBillBoardList CUIDLL$, BILLBOARD1, "FModelessDlgProc", 1
  265.         AddToBillBoardList CUIDLL$, BILLBOARD2, "FModelessDlgProc", 1
  266.         'AddToBillBoardList CUIDLL$, BILLBOARD3, "FModelessDlgProc", 1
  267.     END IF
  268. '$ENDIF
  269.  
  270.     CopyFilesInCopyList
  271.  
  272.  
  273. PERSONALIZE:
  274.     DestExe$ = MakePath(DEST$, GetSectionKeyFilename(INF_SEC_APPFILES,INF_KEY_EXE))
  275.     IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  276.  
  277.  
  278.         sz$ = UIStartDlg(CUIDLL$, CBGETNAMEORG, "FNameOrgDlgProc", 0, "")
  279.         IF sz$ = "CONTINUE" THEN
  280.             USERNAME$ = GetSymbolValue ("NameOut")
  281.             IF USERNAME$ = "" THEN
  282.                 GOSUB BADNAME
  283.                 GOTO PERSONALIZE
  284.             END IF
  285.  
  286.             USERORG$ = GetSymbolValue ("OrgOut")
  287.  
  288.             iRC% = WriteStrResource (DestExe$, IDS_User_Name, USERNAME$)
  289.             IF iRC% < 0 THEN
  290.             '' Debug PRINT iRC%
  291.                 GOTO QUIT
  292.             END IF
  293.             iRC% = WriteStrResource (DestExe$, IDS_Company_Name, USERORG$)
  294.             IF iRC% < 0 THEN
  295.             '' Debug PRINT iRC%
  296.                 GOTO QUIT
  297.             END IF
  298.  
  299.             UIPop 1
  300.         ELSEIF sz$ = "REACTIVATE" THEN
  301.             GOTO PERSONALIZE
  302.         ELSE   '' "EXIT"
  303.             GOSUB ASKQUIT
  304.             GOTO PERSONALIZE
  305.         END IF
  306.     END IF
  307.  
  308. '' Trap all preceding errors before updating autoexec
  309. ON ERROR GOTO ERRQUIT
  310.  
  311. ADD_MISC_WIN_INFO:
  312.     IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  313.         CursorSave% = ShowWaitCursor()
  314.  
  315.  
  316.         ''*** write location appfiles were installed to in Amaze.ini
  317.         CreateIniKeyValue ini$, INI_SEC_INSTALL_INFO, INI_KEY_PROGPATH , DEST$, cmoOverwrite
  318.  
  319.         ''*** point app to sample file
  320.         CreateIniKeyValue ini$, INI_SEC_INTERNAL, INI_KEY_EVENT_FILE, MakePath(DEST$,GetSectionKeyFilename(INF_SEC_APPFILES, INF_KEY_SAMPLE_FILE)), cmoNone
  321.  
  322.         ''*** Add DP and CE to registration database - delete existing reg keys
  323.         IF DoesRegKeyExist(REG_KEY_DPFILE) THEN
  324.             DeleteRegKey REG_KEY_DPFILE
  325.         END IF
  326.         CreateRegKeyValue REG_KEY_DPFILE, REG_VALUE_DAILY_PLANNER_FILE
  327.         CreateRegKeyValue REG_KEY_DPFILE+REG_KEY_OPEN, DestExe$ + REG_VALUE_FILE_MARKER
  328.         IF DoesRegKeyExist(REG_FILE_EXT_DP) THEN
  329.             DeleteRegKey REG_FILE_EXT_DP
  330.         END IF
  331.         CreateRegKeyValue REG_FILE_EXT_DP, REG_KEY_DPFILE
  332.  
  333.         RestoreCursor CursorSave%
  334.     END IF
  335.  
  336. WINFAX_DDE:
  337.         WfxPbString$ = DDELEVEL + "," + DestExe$ + "," + DDESERVICE + "," + DDETOPIC + "," + CLASSNAME_PBEDB
  338.         CreateIniKeyValue WININI, INI_SEC_WFXPBLINKS, DDESERVICE, WfxPbString$, cmoOverwrite
  339.  
  340. IMPORT_EXPORT:
  341.         ''*** add tags to amaze.ini for import/export filters
  342.         IMPEXPLIST$ = "List"
  343.         MakeListFromSectionKeys IMPEXPLIST$, INF_SEC_IMPORTEXPORT
  344.         FOR i% = 1 TO GetListLength(IMPEXPLIST$) STEP 1
  345.             ImpExpSecKey$ = GetListItem(IMPEXPLIST$, i%)
  346.             ImpExpFileSpec$ = MakePath(DEST$, GetSectionKeyFilename(INF_SEC_IMPORTEXPORT, ImpExpSecKey$) )
  347.             CreateIniKeyValue ini$, INF_SEC_IMPORTEXPORT, ImpExpSecKey$, ImpExpFileSpec$, cmoOverwrite
  348.         NEXT i%
  349.  
  350. VERSION_INFO:
  351.         CreateIniKeyValue ini$, INI_SEC_VERSION, INI_KEY_DP, PROG_VERSION, cmoOverwrite
  352.  
  353.  
  354. ADD_PROG_ICON:
  355.     IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  356.             iResponse% = MsgYesNo(ADD_PROGMAN_DLGTEXT_1, ADD_PROGMAN_DLGTEXT_2, ADD_PROGMAN_DLGCAPTION)
  357.  
  358.             IF iResponse% = YES THEN
  359.                 CreateProgmanGroup PROGMAN_GROUP_DAILY_PLANNER, "", cmoNone
  360.                 ShowProgmanGroup   PROGMAN_GROUP_DAILY_PLANNER, 1, cmoNone
  361.                 CreateProgmanItem  PROGMAN_GROUP_DAILY_PLANNER, PROGMAN_ITEM, DestExe$, "", cmoOverwrite
  362.                 CreateProgmanItem  PROGMAN_GROUP_DAILY_PLANNER, PROGMAN_README, MakePath(DEST$,GetSectionKeyFilename(INF_SEC_APPFILES, INF_KEY_README)), "", cmoOverwrite
  363.                 UIPop 1
  364.             ELSE   ''No
  365.                 UIPop 1
  366.             END IF
  367.     END IF ''**GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN**
  368.  
  369. '$IFDEF STARTUP_ICON
  370. ADD_STARTUP_ICON:
  371.     IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  372.  
  373.             nWinMajVer% = GetWindowsMajorVersion()
  374.             nWinMinVer% = GetWindowsMinorVersion()
  375.  
  376.             IF nWinMinVer% >= 10 THEN
  377.                 iResponse% = MsgYesNo(ADD_STARTUP_31_DLGTEXT_1, ADD_STARTUP_31_DLGTEXT_2, ADD_STARTUP_DLGCAPTION)
  378.             ELSE
  379.                 iResponse% = MsgYesNo(ADD_STARTUP_30_DLGTEXT_1, ADD_STARTUP_30_DLGTEXT_2, ADD_STARTUP_DLGCAPTION)
  380.             END IF
  381.  
  382.             IF iResponse% = YES THEN
  383.                 IF nWinMinVer% >= 10 THEN
  384.                     ''Remove any old entries first from progman and win.ini
  385.                     iIniRet% = RemoveFileFromIniKey(WININI, INI_SEC_WINDOWS, INI_KEY_RUN, FILENAME_PBEDB)
  386.  
  387.                     iRet% = DeleteProgmanItem(PROGMAN_GROUP_STARTUP, PROGMAN_ITEM)
  388.                     CreateProgmanItem  PROGMAN_GROUP_STARTUP, PROGMAN_ITEM, DestExe$, "", cmoOverwrite
  389.                 ELSE
  390.                     ''Remove any old entries first
  391.                     iIniRet% = RemoveFileFromIniKey(WININI, INI_SEC_WINDOWS, INI_KEY_RUN, FILENAME_PBEDB)
  392.  
  393.                     szOldRun$ = GetIniKeyString (WININI,INI_SEC_WINDOWS,INI_KEY_RUN)
  394.                     IF (INSTR(szOldRun$, DestExe$) = 0) THEN
  395.                         IF (LEN(szOldRun$) + LEN(DestExe$)+1) > 121 THEN
  396.                             i% = DoMsgBox(ADD_STARTUP_ERROR, ERROR_CAPTION, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  397.                         ELSE
  398.                             CreateIniKeyValue WININI,INI_SEC_WINDOWS,INI_KEY_RUN, szOldRun + " " + DestExe$, cmoOverwrite
  399.                         END IF
  400.                     END IF
  401.                 END IF
  402.                 UIPop 1
  403.             ELSE   ''No
  404.                 ''Remove any old entries from the win.ini
  405.                 iIniRet% = RemoveFileFromIniKey(WININI, INI_SEC_WINDOWS, INI_KEY_RUN, FILENAME_PBEDB)
  406.                 ''IF nWinMinVer% >=10 THEN
  407.                 ''    iRet% = DeleteProgmanItem(PROGMAN_GROUP_STARTUP, PROGMAN_ITEM)
  408.                 ''END IF
  409.                 UIPop 1
  410.             END IF
  411.     END IF ''**GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN**
  412. '$ENDIF
  413.  
  414. CLEANUP:
  415.  
  416.  
  417. QUIT:
  418.     ON ERROR GOTO ERRQUIT
  419.  
  420.     IF (ERR = 0) AND (bRestart% = TRUE) THEN
  421.         dlg% = EXITRESTART
  422.     ELSEIF ERR = 0 THEN    ''no need to restart
  423.         dlg% = EXITSUCCESS
  424.     ELSEIF ERR= STFQUIT THEN
  425.         dlg% = EXITQUIT
  426.     ELSE
  427.         dlg% = EXITFAILURE
  428.     END IF
  429. QUITL1:
  430.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  431.     IF sz$ = "REACTIVATE" THEN
  432.         GOTO QUITL1
  433.     END IF
  434.     UIPop 1
  435.  
  436.     END
  437.  
  438. ERRQUIT:
  439.     i% = DoMsgBox(ERROR_INSTALL, ERROR_CAPTION, MB_OK+MB_TASKMODAL+MB_ICONHAND)
  440.     END
  441. ''------------------------------------------------------------------------------
  442. '' FUNCTIONS
  443. ''------------------------------------------------------------------------------
  444.  
  445. GETPATH:
  446.     SetSymbolValue "EditTextIn", DEST$
  447.     SetSymbolValue "EditFocus", "END"
  448. GETPATHL1:
  449.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", DESTHELP, HELPPROC$)
  450.  
  451.     IF sz$ = "CONTINUE" THEN
  452.         olddest$ = DEST$
  453.         DEST$ = GetSymbolValue("EditTextOut")
  454. '$IFDEF DEBUG
  455.         '' Debug PRINT THEMEDEST$
  456. '$ENDIF ''DEBUG
  457.  
  458.         ''Validate new path.
  459.         IF IsDirWritable(DEST$) = 0 THEN
  460.             GOSUB BADPATH
  461.             GOTO GETPATHL1
  462.         END IF
  463.         UIPop 1
  464.  
  465.         ''Recalc if path changed.
  466.         IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  467.             RecalcPath
  468.  
  469.         END IF
  470.  
  471.         olddest$ = ""
  472.         GOTO INSTALL
  473.     ELSEIF sz$ = "REACTIVATE" THEN
  474.         RecalcPath
  475.  
  476.         GOTO GETPATHL1
  477.     ELSEIF sz$ = "EXIT" THEN
  478.         GOSUB ASKQUIT
  479.         GOTO GETPATHL1
  480.     ELSE
  481.         UIPop 1
  482.         GOTO INSTALL
  483.     END IF
  484.  
  485.  
  486.  
  487. TOOBIG:
  488.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  489.     IF sz$ = "REACTIVATE" THEN
  490.         RecalcPath
  491.         GOTO TOOBIG
  492.     END IF
  493.     UIPop 1
  494.     RETURN
  495.  
  496.  
  497.  
  498. BADPATH:
  499.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  500.     IF sz$ = "REACTIVATE" THEN
  501.         RecalcPath
  502.         GOTO BADPATH
  503.     END IF
  504.     UIPop 1
  505.     RETURN
  506.  
  507. BADNAME:
  508.     sz$ = UIStartDlg(CUIDLL$, CBBADNAME, "FInfo0DlgProc", 0, "")
  509.     IF sz$ = "REACTIVATE" THEN
  510.         GOTO BADNAME
  511.     END IF
  512.     UIPop 1
  513.     RETURN
  514.  
  515.  
  516. ASKQUIT:
  517.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  518.  
  519.     IF sz$ = "EXIT" THEN
  520.         UIPopAll
  521.         ERROR STFQUIT
  522.     ELSEIF sz$ = "REACTIVATE" THEN
  523.         GOTO ASKQUIT
  524.     ELSE
  525.         UIPop 1
  526.     END IF
  527.     RETURN
  528.  
  529.  
  530.  
  531. '**
  532. '** Purpose:
  533. '**     Adds the specified option files to the copy list.
  534. '** Arguments:
  535. '**     ftype%  - type of files to add, one of the following:
  536. '**             APPFILES, THEMEPACK
  537. '** Returns:
  538. '**     none.
  539. '*************************************************************************
  540. SUB AddOptFilesToCopyList (ftype%) STATIC
  541.     IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  542.         SrcDir$ = GetSymbolValue("STF_SRCDIR")
  543.         IF ftype% = APPFILES THEN
  544.             IF GetListLength(BadFileList$) <= 0 THEN
  545.                 AddSectionFilesToCopyList INF_SEC_APPFILES, SrcDir$, DEST$
  546.                 'AddSectionFilesToCopyList INF_SEC_COMMON, SrcDir$, GetWindowsDir()
  547.             ELSE
  548.                 FilesToInstall$ = "FilesToInstall"
  549.                 MakeListFromSectionKeys FilesToInstall$, INF_SEC_APPFILES
  550.                 FOR i%=1 TO GetListLength(FilesToInstall$) STEP 1
  551.                     FOR j%=1 TO GetListLength(BadFileList$) STEP 1
  552.                         IF GetListItem(BadFileList$, j%) <> GetSectionKeyFilename(INF_SEC_APPFILES, GetListItem(FilesToInstall$, i%)) THEN
  553.                             AddSectionKeyFileToCopyList INF_SEC_APPFILES, GetListItem(FilesToInstall, i%), SrcDir$, DEST$
  554.                             EXIT FOR
  555.                         END IF
  556.                     NEXT j%
  557.                 NEXT i%
  558.                 RemoveSymbol FilesToInstall$
  559. '$IFDEF COMMON
  560.                 FilesToInstall$ = "FilesToInstall"
  561.                 MakeListFromSectionKeys FilesToInstall$, INF_SEC_COMMON
  562.                 FOR i%=1 TO GetListLength(FilesToInstall$) STEP 1
  563.                     FOR j%=1 TO GetListLength(BadFileList$) STEP 1
  564.                         IF GetListItem(BadFileList$, j%) <> GetSectionKeyFilename(INF_SEC_COMMON, GetListItem(FilesToInstall$, i%)) THEN
  565.                             AddSectionKeyFileToCopyList INF_SEC_COMMON, GetListItem(FilesToInstall, i%), SrcDir$,  GetWindowsDir()
  566.                             EXIT FOR
  567.                         END IF
  568.                     NEXT j%
  569.                 NEXT i%
  570.                 RemoveSymbol FilesToInstall$
  571. '$ENDIF
  572.             END IF
  573.  
  574.             nWinMajVer% = GetWindowsMajorVersion()
  575.             nWinMinVer% = GetWindowsMinorVersion()
  576.  
  577.             ''*** Add the import export files to the list
  578.             AddSectionFilesToCopyList INF_SEC_IMPORTEXPORT, SrcDir$, DEST$
  579.  
  580.             IF (bInstallPrefs% = TRUE) THEN
  581.                 AddSectionKeyFileToCopyList INF_SEC_PREFS, INF_KEY_PREFS, SrcDir$, DEST$
  582.             END IF
  583.  
  584.             IF (bWinSysDirAccess%) THEN
  585.                 szCommonDir$ =  GetWindowsSysDir()
  586.             ELSE
  587.                 szCommonDir$ =  DEST$
  588.             END IF
  589.             IF (bInstallCtl3D% = TRUE) THEN
  590.                 AddSectionKeyFileToCopyList INF_SEC_OTHER, INF_KEY_CTL3D, SrcDir$, szCommonDir$
  591.                 bRestart% = TRUE
  592.             ELSE
  593.                 bRestart% = bRestart%
  594.             END IF
  595.  
  596.             IF (nWinMajVer% <= 3) AND NOT(nWinMinVer% >= 10) THEN
  597.                 AddSectionKeyFileToCopyList INF_SEC_OTHER, INF_KEY_COMMON, SrcDir$, szCommonDir$
  598.                 AddSectionKeyFileToCopyList INF_SEC_OTHER, INF_KEY_SHELL, SrcDir$, szCommonDir$
  599.                 ''bRestart% = TRUE
  600.             ELSE
  601.                 bRestart% = bRestart%
  602.             END IF
  603.  
  604.  
  605.         END IF
  606.         SrcDir$ = ""
  607.     END IF
  608. END SUB
  609.  
  610.  
  611. '**
  612. '** Purpose:
  613. '**     Recalculates disk space for the given option files and sets
  614. '**     the status info symbol "StatusItemsText".
  615. '** Arguments:
  616. '**     ftype% - type of files to add, one of the following:
  617. '**             APPFILES, THEMEPACK
  618. '** Returns:
  619. '**     none.
  620. '*************************************************************************
  621. SUB RecalcOptFiles (ftype%) STATIC
  622.     DIM iExtraDiskSpace%
  623.     CursorSave% = ShowWaitCursor()
  624.     ClearCopyList
  625.     AddOptFilesToCopyList ftype%
  626.  
  627.     fExtra% = 0
  628.     IF ftype% = APPFILES THEN
  629.         ListSym$ = APPNEEDS$
  630.         IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN
  631.             ''Add extra cost to Windows drive for ini/progman, etc.
  632.             ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  633.             nWinMajVer% = GetWindowsMajorVersion()
  634.             nWinMinVer% = GetWindowsMinorVersion()
  635.             iExtraDiskSpace% = iExtraDiskSpace% + MISC_DISK_SPACE
  636.             IF (nWinMajVer% <= 3) AND NOT(nWinMinVer% >= 10) THEN
  637.                 iExtraDiskSpace% = iExtraDiskSpace% + COMMON_DLG_DISK_SPACE
  638.             END IF
  639.             ReplaceListItem EXTRACOSTS$, ndrive%, LTRIM$(STR$(iExtraDiskSpace%))
  640.             fExtra% = 1
  641.         END IF
  642.     END IF
  643.  
  644.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  645.  
  646.     cost& = 0
  647.     FOR i% = 1 TO 26 STEP 1
  648.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  649.     NEXT i%
  650.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  651.  
  652.     IF StillNeed& > 0 THEN
  653.         ReplaceListItem BIGLIST$, ftype%, "YES"
  654.     ELSE
  655.         ReplaceListItem BIGLIST$, ftype%, ""
  656.     END IF
  657.  
  658.     IF fExtra% THEN
  659.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  660.     END IF
  661.     RestoreCursor CursorSave%
  662.     ListSym$ = ""
  663. END SUB
  664.  
  665.  
  666. '**
  667. '** Purpose:
  668. '**     Recalculates disk space and sets option status info according
  669. '**     to the current destination path.
  670. '** Arguments:
  671. '**     none.
  672. '** Returns:
  673. '**     none.
  674. '*************************************************************************
  675. SUB RecalcPath STATIC
  676.  
  677.     CursorSave% = ShowWaitCursor()
  678.  
  679.     RecalcOptFiles APPFILES
  680.  
  681.     RestoreCursor CursorSave%
  682. END SUB
  683.  
  684.  
  685.  
  686. '**
  687. '** Purpose:
  688. '**     Appends a file name to the end of a directory path,
  689. '**     inserting a backslash character as needed.
  690. '** Arguments:
  691. '**     szDir$  - full directory path (with optional ending "\")
  692. '**     szFile$ - filename to append to directory
  693. '** Returns:
  694. '**     Resulting fully qualified path name.
  695. '*************************************************************************
  696. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  697.     IF szDir$ = "" THEN
  698.         MakePath = szFile$
  699.     ELSEIF szFile$ = "" THEN
  700.         MakePath = szDir$
  701.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  702.         MakePath = szDir$ + szFile$
  703.     ELSE
  704.         MakePath = szDir$ + "\" + szFile$
  705.     END IF
  706. END FUNCTION
  707.  
  708.  
  709. '**
  710. '** Purpose:
  711. '**     Pads a string so that it is two bytes.  Adds leading zero,
  712. '**
  713. '** Arguments:
  714. '**     szNum$  - intended to take a one "digit" string
  715. '**
  716. '** Returns:
  717. '**     String padded with a zero
  718. '*************************************************************************
  719. FUNCTION PAD (szNum$) STATIC AS STRING
  720. IF LEN(szNum$) = 1 THEN
  721.     PAD = "0"+szNum$
  722. ELSE
  723.     PAD = szNum$
  724. END IF
  725. END FUNCTION
  726.  
  727.